import pandas as pd
import numpy as np
url = "https://docs.google.com/spreadsheets/d/1mS6khEB6m8cPNenNvY9Tg6bJ6YkmcvCI/export?format=csv&gid=1327379612"
df = pd.read_csv(url)
df.head()
| TERM | SUBJECT | NBR | COURSE NAME | SECTION | PROF | TOTAL | A+ | A | A- | ... | B | B- | C+ | C | C- | D | F | W | INC/NA | AVG GPA | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | S2023 | AACS | 107 | Immigrant Communities Queens | 1 | KHANDELWAL, M | 13 | 0 | 1 | 5 | ... | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 3.643 |
| 1 | S2023 | ACCT | 100 | Fin & Mgr Acct | 1 | HO, V | 20 | 0 | 5 | 3 | ... | 5 | 3 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 3.382 |
| 2 | S2023 | ACCT | 101 | Intro Thry & Prac of Acct I | 11 | CHAN, J | 29 | 0 | 13 | 1 | ... | 5 | 0 | 2 | 0 | 0 | 1 | 0 | 4 | 0 | 3.448 |
| 3 | S2023 | ACCT | 101 | Intro Thry & Prac of Acct I | 8 | FEISULLIN, A | 40 | 5 | 2 | 5 | ... | 3 | 3 | 8 | 2 | 0 | 0 | 2 | 5 | 1 | 2.918 |
| 4 | S2023 | ACCT | 101 | Intro Thry & Prac of Acct I | 9 | SUN, F | 40 | 0 | 2 | 10 | ... | 5 | 0 | 1 | 1 | 3 | 5 | 2 | 6 | 1 | 2.634 |
5 rows × 21 columns
analysis_df = df.drop(columns = ['TERM','SECTION','INC/NA'])
analysis_df
| SUBJECT | NBR | COURSE NAME | PROF | TOTAL | A+ | A | A- | B+ | B | B- | C+ | C | C- | D | F | W | AVG GPA | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | AACS | 107 | Immigrant Communities Queens | KHANDELWAL, M | 13 | 0 | 1 | 5 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 3.643 |
| 1 | ACCT | 100 | Fin & Mgr Acct | HO, V | 20 | 0 | 5 | 3 | 1 | 5 | 3 | 0 | 0 | 0 | 0 | 0 | 3 | 3.382 |
| 2 | ACCT | 101 | Intro Thry & Prac of Acct I | CHAN, J | 29 | 0 | 13 | 1 | 3 | 5 | 0 | 2 | 0 | 0 | 1 | 0 | 4 | 3.448 |
| 3 | ACCT | 101 | Intro Thry & Prac of Acct I | FEISULLIN, A | 40 | 5 | 2 | 5 | 4 | 3 | 3 | 8 | 2 | 0 | 0 | 2 | 5 | 2.918 |
| 4 | ACCT | 101 | Intro Thry & Prac of Acct I | SUN, F | 40 | 0 | 2 | 10 | 3 | 5 | 0 | 1 | 1 | 3 | 5 | 2 | 6 | 2.634 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2403 | URBST | 371W | VT: Service Learning Project | GOLDFISCHER, E | 23 | 4 | 7 | 3 | 2 | 3 | 2 | 0 | 0 | 1 | 0 | 0 | 1 | 3.536 |
| 2404 | URBST | 373W | Spec. Problems-Environ Studies | CONSTANTINIDES, C | 20 | 7 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 4.000 |
| 2405 | WGS | 101W | Intro Women & Gender Studies | GIARDINA, C | 25 | 0 | 6 | 7 | 4 | 4 | 1 | 0 | 0 | 0 | 0 | 0 | 2 | 3.536 |
| 2406 | WGS | 101W | Intro Women & Gender Studies | GIARDINA, C | 25 | 0 | 5 | 5 | 5 | 2 | 1 | 1 | 0 | 1 | 1 | 1 | 3 | 3.123 |
| 2407 | WGS | 201W | Theories of Feminism | CRANDALL, E | 15 | 0 | 3 | 4 | 0 | 0 | 1 | 2 | 1 | 1 | 0 | 0 | 3 | 3.150 |
2408 rows × 18 columns
unique(): This function returns an array of all unique values in the order that they appear in the original DataFrame or Series. It's useful when you want to see or use the actual unique values (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.unique.html)
nunique(): This function returns an integer that represents the number of unique values. It's useful when you just want to know how many unique values exist, rather than what those unique values are (https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.nunique.html)
def gpa_letter_converter(gpa):
letter_grades = {
"A": 4.0,
"A-": (3.7, 3.8, 3.9),
"B+": (3.3, 3.4, 3.5, 3.6),
"B": (3.0, 3.1, 3.2),
"B-": (2.7, 2.8, 2.9),
"C+": (2.3, 2.4, 2.5, 2.6),
"C": (2.0, 2.1, 2.2),
"C-": (1.7, 1.8, 1.9),
"D": (1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6),
"F": (0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)
}
for letter_grade, number_grade in letter_grades.items():
if isinstance(number_grade, float) and gpa == number_grade:
return letter_grade
elif isinstance(number_grade, tuple) and gpa in number_grade:
return letter_grade
return None
def calculate_average_gpas(df):
# Prepare a list to store the results
results = []
# GPA equivalents for each letter grade
letter_grades_to_gpa = {
"A+": 4.0,
"A": 4.0,
"A-": 3.7,
"B+": 3.3,
"B": 3.0,
"B-": 2.7,
"C+": 2.3,
"C": 2.0,
"C-": 1.7,
"D": 1.0,
"F": 0.0
}
# Loop over all unique course numbers
for class_nbr in df["NBR"].unique():
# Filter the DataFrame for the current course number
df_nbr = df[df["NBR"] == class_nbr]
# Loop over all unique professors for the current course number
for prof in df_nbr["PROF"].unique():
# Filter the DataFrame for the current professor
df_prof = df_nbr[df_nbr["PROF"] == prof]
# Calculate the average GPA for the current professor and course number
avg_gpa_prof = round(df_prof["AVG GPA"].mean(), 1)
# Convert the individual grade counts to GPA equivalents and calculate the standard deviation
gpa_distributions = []
for grade_letter, gpa in letter_grades_to_gpa.items():
gpa_distributions.extend([gpa] * df_prof[grade_letter].sum())
std_dev_gpa_prof = round(np.std(gpa_distributions), 2)
# Append the result to the list
results.append({
"CLASS NUMBER": class_nbr,
"PROF": prof,
"AVG GPA PROF": avg_gpa_prof,
"AVG GPA PROF LETTER": gpa_letter_converter(avg_gpa_prof),
"STD DEV GPA PROF": std_dev_gpa_prof
})
# If there is more than one professor for this course, calculate the average GPA for the current course number, regardless of the professor
if df_nbr["PROF"].nunique() > 1:
avg_gpa_nbr = round(df_nbr["AVG GPA"].mean(), 1)
# Convert the individual grade counts to GPA equivalents and calculate the standard deviation
gpa_distributions = []
for grade_letter, gpa in letter_grades_to_gpa.items():
gpa_distributions.extend([gpa] * df_nbr[grade_letter].sum())
std_dev_gpa_nbr = round(np.std(gpa_distributions), 2)
# Append the result to the list
results.append({
"CLASS NUMBER": class_nbr,
"PROF": "All Professors",
"AVG GPA PROF": avg_gpa_nbr,
"AVG GPA PROF LETTER": gpa_letter_converter(avg_gpa_nbr),
"STD DEV GPA PROF": std_dev_gpa_nbr
})
# Convert the list of results to a DataFrame
df_results = pd.DataFrame(results)
# Find the hardest class based on average GPA
hardest_class = df_results[df_results["PROF"] == "All Professors"].sort_values("AVG GPA PROF").iloc[0]
# Calculate the average GPA for the entire subject
avg_gpa_subject = round(df["AVG GPA"].mean(), 1)
print(f"Average GPA for this entire subject in Fall 2022 is: {avg_gpa_subject}, which is a {gpa_letter_converter(avg_gpa_subject)}")
print(f"The hardest class based on average GPA in Fall 2022 is class number: {hardest_class['CLASS NUMBER']} with an average GPA of {hardest_class['AVG GPA PROF']}, which is a {hardest_class['AVG GPA PROF LETTER']}")
print("\nStandard deviation tells us about the spread of the grades that students received in each class. A higher standard deviation indicates a wider range of grades, while a lower standard deviation indicates that grades were more closely clustered around the average.")
return df_results
def calculate_teacher_gpas(df):
# Prepare a list to store the results
results = []
# GPA equivalents for each letter grade
letter_grades_to_gpa = {
"A+": 4.0,
"A": 4.0,
"A-": 3.7,
"B+": 3.3,
"B": 3.0,
"B-": 2.7,
"C+": 2.3,
"C": 2.0,
"C-": 1.7,
"D": 1.0,
"F": 0.0
}
# Loop over all unique professors
for prof in sorted(df["PROF"].unique()):
# Filter the DataFrame for the current professor
df_prof = df[df["PROF"] == prof]
# Calculate the average GPA for the current professor
avg_gpa_prof = round(df_prof["AVG GPA"].mean(), 1)
# Convert the individual grade counts to GPA equivalents and calculate the standard deviation
gpa_distributions = []
for grade_letter, gpa in letter_grades_to_gpa.items():
gpa_distributions.extend([gpa] * df_prof[grade_letter].sum())
std_dev_gpa_prof = round(np.std(gpa_distributions), 1)
# Calculate the percentage of students who withdrew for the current professor
withdraw_percentage = df_prof["W"].sum() / df_prof["TOTAL"].sum()
# Append the result to the list
results.append({
"PROF": prof,
"AVG GPA PROF": avg_gpa_prof,
"AVG GPA PROF LETTER": gpa_letter_converter(avg_gpa_prof),
"STD DEV GPA PROF": std_dev_gpa_prof,
"NUM OF CLASSES": len(df_prof),
"WITHDRAW PERCENTAGE": round(withdraw_percentage * 100, 1)
})
# Convert the list of results to a DataFrame
df_results = pd.DataFrame(results)
# Calculate the average GPA for the entire subject
avg_gpa_subject = round(df["AVG GPA"].mean(), 1)
# Calculate the average standard deviation for the entire subject
gpa_distributions = []
for grade_letter, gpa in letter_grades_to_gpa.items():
gpa_distributions.extend([gpa] * df[grade_letter].sum())
avg_std_dev_subject = round(np.std(gpa_distributions), 1)
# Calculate the average withdrawal percentage for the entire subject
withdraw_percentage_subject = round((df["W"].sum() / df["TOTAL"].sum()) * 100, 2)
# Find the professors who teach more than one class, have a GPA that is the same or higher than the subject average GPA,
# and for whom less than 40% of students withdrew
best_profs = df_results[(df_results["NUM OF CLASSES"] > 1) & (df_results["AVG GPA PROF"] >= avg_gpa_subject) & (df_results["WITHDRAW PERCENTAGE"] <= withdraw_percentage_subject)]
print(f"Professors who teach more than one class, have a GPA that is the same or higher than the subject average GPA ({avg_gpa_subject}), and have a withdrawal percentage that is less or equal than the subject average withdrawal percentage ({withdraw_percentage_subject}%):\n")
print(best_profs, "\n")
print("Note: This ignores rate my professor ratings. This is soley based on GPA and it doesn't consider how much students actually learn from these teachers!")
print(f"Average standard deviation of GPA for all teachers in this subject in Fall 2022 is: {avg_std_dev_subject}")
return df_results
analysis_df = analysis_df.dropna(subset = "PROF")
analysis_df = analysis_df[analysis_df["AVG GPA"] != 0]
cs_df = analysis_df[analysis_df["SUBJECT"] == "CSCI"]
pd.set_option('display.max_rows', None)
cs_df
| SUBJECT | NBR | COURSE NAME | PROF | TOTAL | A+ | A | A- | B+ | B | B- | C+ | C | C- | D | F | W | AVG GPA | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 566 | CSCI | 12 | Intro Computers & Computation | HUANG, X | 38 | 1 | 3 | 4 | 2 | 6 | 4 | 4 | 3 | 0 | 1 | 0 | 10 | 2.943 |
| 568 | CSCI | 48 | Spreadsheet Programming | FRIED, M | 94 | 12 | 16 | 7 | 12 | 11 | 4 | 5 | 4 | 5 | 7 | 3 | 8 | 2.980 |
| 569 | CSCI | 48 | Spreadsheet Programming | JAGDEO, M | 78 | 5 | 12 | 10 | 10 | 7 | 7 | 2 | 4 | 3 | 4 | 8 | 6 | 2.772 |
| 576 | CSCI | 85 | Database App Programming | HILL, D | 34 | 1 | 4 | 3 | 4 | 1 | 2 | 3 | 0 | 1 | 4 | 5 | 4 | 2.332 |
| 577 | CSCI | 90 | Topics in Computing | CONNOR, T | 13 | 2 | 11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4.000 |
| 578 | CSCI | 111 | Intro Algorithmic Problem Solv | TSE, C | 136 | 0 | 9 | 7 | 2 | 5 | 16 | 13 | 8 | 0 | 0 | 15 | 57 | 2.301 |
| 579 | CSCI | 111 | Intro Algorithmic Problem Solv | CHYN, X | 163 | 2 | 12 | 4 | 8 | 15 | 9 | 9 | 13 | 3 | 3 | 21 | 62 | 2.235 |
| 580 | CSCI | 111 | Intro Algorithmic Problem Solv | CHYN, X | 236 | 1 | 7 | 7 | 11 | 21 | 12 | 22 | 10 | 15 | 19 | 29 | 82 | 1.979 |
| 599 | CSCI | 211 | Object-Oriented Program in C++ | WAXMAN, J | 143 | 13 | 8 | 9 | 3 | 16 | 17 | 9 | 16 | 0 | 8 | 21 | 22 | 2.348 |
| 600 | CSCI | 211 | Object-Oriented Program in C++ | WAXMAN, J | 211 | 18 | 7 | 6 | 10 | 17 | 30 | 8 | 28 | 0 | 18 | 33 | 36 | 2.169 |
| 601 | CSCI | 211 | Object-Oriented Program in C++ | ALAYEV, Y | 12 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 2 | 3 | 1 | 4 | 1.500 |
| 617 | CSCI | 212 | Object-Oriented Prog in Java | LORD, K | 150 | 11 | 11 | 10 | 11 | 16 | 6 | 11 | 8 | 6 | 9 | 11 | 40 | 2.600 |
| 618 | CSCI | 212 | Object-Oriented Prog in Java | STEINBERG, O | 85 | 1 | 7 | 8 | 10 | 1 | 4 | 5 | 4 | 1 | 3 | 11 | 29 | 2.411 |
| 619 | CSCI | 212 | Object-Oriented Prog in Java | LORD, K | 165 | 3 | 11 | 10 | 12 | 13 | 12 | 9 | 13 | 7 | 11 | 21 | 43 | 2.243 |
| 634 | CSCI | 220 | Discrete Structures | KAHROBAEI, D | 35 | 4 | 10 | 6 | 1 | 3 | 1 | 0 | 0 | 2 | 0 | 0 | 7 | 3.578 |
| 635 | CSCI | 220 | Discrete Structures | KAHROBAEI, D | 35 | 4 | 11 | 3 | 4 | 4 | 0 | 1 | 1 | 0 | 0 | 1 | 6 | 3.469 |
| 636 | CSCI | 220 | Discrete Structures | TAO, X | 30 | 0 | 2 | 5 | 2 | 4 | 7 | 2 | 2 | 2 | 1 | 0 | 3 | 2.852 |
| 637 | CSCI | 220 | Discrete Structures | KONG, T | 22 | 3 | 3 | 1 | 2 | 1 | 1 | 0 | 1 | 0 | 4 | 3 | 2 | 2.421 |
| 638 | CSCI | 220 | Discrete Structures | GRYAK, J | 35 | 1 | 1 | 1 | 0 | 4 | 6 | 11 | 3 | 0 | 0 | 3 | 5 | 2.373 |
| 639 | CSCI | 220 | Discrete Structures | GRYAK, J | 27 | 2 | 1 | 0 | 0 | 1 | 5 | 2 | 4 | 0 | 0 | 5 | 7 | 2.055 |
| 640 | CSCI | 220 | Discrete Structures | KONG, T | 23 | 0 | 1 | 1 | 0 | 0 | 0 | 4 | 3 | 0 | 0 | 3 | 10 | 1.908 |
| 641 | CSCI | 240 | Computer Org & Assembly Lang | YEH, J | 40 | 3 | 7 | 9 | 1 | 2 | 3 | 4 | 2 | 1 | 0 | 4 | 4 | 2.933 |
| 642 | CSCI | 240 | Computer Org & Assembly Lang | YEH, J | 40 | 3 | 1 | 5 | 5 | 7 | 1 | 3 | 3 | 3 | 0 | 3 | 6 | 2.726 |
| 643 | CSCI | 240 | Computer Org & Assembly Lang | YEH, J | 40 | 2 | 5 | 6 | 1 | 5 | 4 | 3 | 2 | 3 | 0 | 4 | 5 | 2.723 |
| 644 | CSCI | 240 | Computer Org & Assembly Lang | TAO, X | 32 | 0 | 3 | 2 | 5 | 6 | 2 | 2 | 6 | 2 | 0 | 2 | 2 | 2.643 |
| 645 | CSCI | 240 | Computer Org & Assembly Lang | TAO, X | 32 | 0 | 1 | 1 | 3 | 5 | 4 | 3 | 6 | 1 | 0 | 2 | 6 | 2.462 |
| 646 | CSCI | 240 | Computer Org & Assembly Lang | FLUTURE, S | 64 | 1 | 3 | 1 | 0 | 1 | 4 | 8 | 2 | 0 | 0 | 10 | 34 | 1.863 |
| 647 | CSCI | 313 | Data Structures | TAO, X | 32 | 0 | 3 | 3 | 4 | 7 | 1 | 4 | 3 | 0 | 0 | 6 | 1 | 2.426 |
| 648 | CSCI | 313 | Data Structures | MITCHELL, T | 20 | 0 | 1 | 1 | 0 | 2 | 2 | 2 | 2 | 3 | 1 | 0 | 6 | 2.414 |
| 649 | CSCI | 313 | Data Structures | STEINBERG, O | 32 | 1 | 0 | 2 | 3 | 5 | 8 | 2 | 4 | 0 | 0 | 5 | 2 | 2.350 |
| 650 | CSCI | 313 | Data Structures | MITCHELL, T | 27 | 1 | 1 | 3 | 2 | 0 | 5 | 0 | 1 | 4 | 1 | 3 | 6 | 2.333 |
| 651 | CSCI | 313 | Data Structures | MITCHELL, T | 25 | 1 | 2 | 1 | 3 | 1 | 2 | 1 | 1 | 1 | 0 | 5 | 7 | 2.222 |
| 652 | CSCI | 313 | Data Structures | SVADLENKA, J | 14 | 2 | 0 | 0 | 1 | 0 | 1 | 0 | 2 | 0 | 1 | 2 | 5 | 2.111 |
| 653 | CSCI | 313 | Data Structures | STEINBERG, O | 32 | 1 | 6 | 4 | 2 | 0 | 2 | 1 | 3 | 0 | 0 | 11 | 2 | 2.103 |
| 654 | CSCI | 316 | Principles of Programming Lang | SMITH-THOMPSON, A | 33 | 3 | 1 | 3 | 0 | 3 | 3 | 6 | 5 | 0 | 2 | 1 | 5 | 2.593 |
| 655 | CSCI | 316 | Principles of Programming Lang | KONG, T | 51 | 1 | 4 | 0 | 2 | 6 | 10 | 4 | 3 | 0 | 1 | 10 | 10 | 2.141 |
| 656 | CSCI | 316 | Principles of Programming Lang | SMITH-THOMPSON, A | 33 | 0 | 0 | 0 | 1 | 5 | 1 | 5 | 12 | 1 | 3 | 2 | 3 | 2.040 |
| 657 | CSCI | 316 | Principles of Programming Lang | SMITH-THOMPSON, A | 33 | 0 | 1 | 2 | 1 | 3 | 0 | 7 | 6 | 0 | 4 | 5 | 2 | 1.924 |
| 658 | CSCI | 316 | Principles of Programming Lang | SVITAK, J | 31 | 0 | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 3 | 8 | 2 | 10 | 1.738 |
| 659 | CSCI | 316 | Principles of Programming Lang | SVITAK, J | 53 | 0 | 0 | 0 | 1 | 1 | 2 | 3 | 5 | 5 | 18 | 4 | 13 | 1.413 |
| 660 | CSCI | 320 | Theory of Computation | OBRENIC, B | 79 | 11 | 6 | 3 | 4 | 15 | 4 | 6 | 7 | 0 | 1 | 10 | 12 | 2.640 |
| 661 | CSCI | 320 | Theory of Computation | OBRENIC, B | 108 | 6 | 7 | 3 | 1 | 15 | 10 | 6 | 21 | 0 | 2 | 11 | 26 | 2.393 |
| 662 | CSCI | 320 | Theory of Computation | BOKLAN, K | 44 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 10 | 29 | 0.800 |
| 663 | CSCI | 323 | Design & Analysis Algorithms | KAHROBAEI, D | 35 | 6 | 14 | 3 | 1 | 2 | 1 | 0 | 2 | 0 | 0 | 0 | 6 | 3.693 |
| 664 | CSCI | 323 | Design & Analysis Algorithms | PHILLIPS, T | 27 | 3 | 1 | 1 | 3 | 4 | 0 | 0 | 2 | 0 | 0 | 4 | 9 | 2.533 |
| 665 | CSCI | 323 | Design & Analysis Algorithms | PHILLIPS, T | 26 | 3 | 2 | 2 | 2 | 2 | 1 | 0 | 1 | 0 | 0 | 5 | 8 | 2.483 |
| 666 | CSCI | 323 | Design & Analysis Algorithms | CHYN, X | 35 | 0 | 1 | 3 | 3 | 5 | 3 | 2 | 5 | 0 | 0 | 5 | 8 | 2.322 |
| 667 | CSCI | 323 | Design & Analysis Algorithms | BROWN, T | 30 | 1 | 1 | 1 | 0 | 2 | 1 | 1 | 8 | 0 | 0 | 9 | 6 | 1.613 |
| 668 | CSCI | 331 | Database Systems | SY, B | 24 | 0 | 1 | 1 | 2 | 3 | 2 | 0 | 1 | 2 | 0 | 0 | 12 | 2.842 |
| 669 | CSCI | 331 | Database Systems | OBRENIC, B | 60 | 3 | 1 | 2 | 4 | 6 | 5 | 6 | 13 | 0 | 0 | 3 | 17 | 2.509 |
| 670 | CSCI | 331 | Database Systems | CHYN, X | 31 | 1 | 3 | 2 | 1 | 5 | 3 | 4 | 4 | 0 | 0 | 4 | 4 | 2.481 |
| 671 | CSCI | 331 | Database Systems | LEAVITT, D | 36 | 0 | 3 | 2 | 1 | 7 | 1 | 4 | 9 | 0 | 4 | 1 | 4 | 2.425 |
| 672 | CSCI | 331 | Database Systems | HELLER, P | 38 | 0 | 2 | 0 | 4 | 1 | 2 | 3 | 6 | 0 | 0 | 3 | 17 | 2.310 |
| 673 | CSCI | 335 | Information Org and Retrieval | GOLDBERG, R | 32 | 0 | 3 | 2 | 3 | 9 | 6 | 4 | 2 | 0 | 1 | 0 | 2 | 2.890 |
| 674 | CSCI | 340 | Operating Systems Principles | SVADLENKA, J | 37 | 1 | 3 | 4 | 3 | 3 | 1 | 1 | 7 | 0 | 1 | 1 | 11 | 2.788 |
| 675 | CSCI | 340 | Operating Systems Principles | FLUTURE, S | 35 | 1 | 2 | 1 | 1 | 2 | 5 | 3 | 6 | 0 | 0 | 0 | 13 | 2.733 |
| 676 | CSCI | 340 | Operating Systems Principles | SMITH-THOMPSON, A | 35 | 3 | 2 | 1 | 0 | 6 | 7 | 2 | 8 | 0 | 0 | 1 | 4 | 2.707 |
| 677 | CSCI | 340 | Operating Systems Principles | SVADLENKA, J | 27 | 2 | 0 | 2 | 2 | 1 | 2 | 1 | 2 | 0 | 3 | 0 | 12 | 2.647 |
| 678 | CSCI | 340 | Operating Systems Principles | FLUTURE, S | 35 | 1 | 0 | 3 | 0 | 1 | 3 | 6 | 4 | 0 | 0 | 2 | 14 | 2.400 |
| 679 | CSCI | 340 | Operating Systems Principles | SVADLENKA, J | 31 | 1 | 2 | 1 | 1 | 1 | 0 | 1 | 2 | 0 | 1 | 4 | 15 | 2.093 |
| 680 | CSCI | 340 | Operating Systems Principles | RAHMAN, M | 37 | 0 | 0 | 1 | 0 | 1 | 6 | 5 | 13 | 0 | 0 | 6 | 5 | 1.888 |
| 681 | CSCI | 343 | Computer Architecture | FLUTURE, S | 33 | 4 | 5 | 1 | 3 | 0 | 0 | 3 | 2 | 0 | 0 | 0 | 15 | 3.361 |
| 682 | CSCI | 343 | Computer Architecture | UPADHYAY, V | 35 | 3 | 5 | 1 | 1 | 4 | 3 | 2 | 7 | 0 | 0 | 1 | 8 | 2.878 |
| 683 | CSCI | 343 | Computer Architecture | FLUTURE, S | 42 | 1 | 1 | 3 | 4 | 3 | 4 | 3 | 2 | 0 | 0 | 1 | 20 | 2.864 |
| 684 | CSCI | 343 | Computer Architecture | UPADHYAY, V | 34 | 1 | 6 | 0 | 1 | 6 | 2 | 2 | 4 | 0 | 0 | 4 | 8 | 2.588 |
| 685 | CSCI | 343 | Computer Architecture | SVITAK, J | 35 | 0 | 1 | 1 | 0 | 2 | 3 | 2 | 7 | 4 | 6 | 2 | 7 | 1.900 |
| 686 | CSCI | 343 | Computer Architecture | SVITAK, J | 34 | 0 | 1 | 0 | 1 | 4 | 0 | 2 | 4 | 2 | 9 | 1 | 10 | 1.846 |
| 687 | CSCI | 348 | Data Communications | RAHMAN, M | 32 | 0 | 1 | 1 | 2 | 2 | 1 | 8 | 6 | 0 | 0 | 1 | 10 | 2.427 |
| 688 | CSCI | 352 | Cryptography | BOKLAN, K | 17 | 0 | 0 | 0 | 0 | 2 | 1 | 0 | 1 | 0 | 0 | 1 | 12 | 2.140 |
| 689 | CSCI | 355 | Internet and Web Technologies | FRIED, M | 40 | 0 | 9 | 2 | 4 | 6 | 4 | 4 | 3 | 2 | 3 | 1 | 2 | 2.816 |
| 690 | CSCI | 355 | Internet and Web Technologies | LAW, R | 31 | 1 | 2 | 5 | 2 | 1 | 2 | 3 | 3 | 0 | 0 | 4 | 8 | 2.539 |
| 691 | CSCI | 355 | Internet and Web Technologies | LAW, R | 36 | 2 | 3 | 1 | 1 | 1 | 3 | 1 | 1 | 0 | 3 | 6 | 14 | 2.064 |
| 692 | CSCI | 355 | Internet and Web Technologies | LAW, R | 31 | 2 | 2 | 1 | 2 | 0 | 1 | 2 | 4 | 0 | 0 | 11 | 6 | 1.664 |
| 693 | CSCI | 370 | Software Engineering | GOLDBERG, R | 33 | 0 | 5 | 3 | 3 | 5 | 2 | 6 | 1 | 0 | 0 | 1 | 7 | 2.969 |
| 694 | CSCI | 370 | Software Engineering | GREENBERG, A | 34 | 1 | 5 | 3 | 4 | 8 | 1 | 6 | 5 | 0 | 0 | 1 | 0 | 2.906 |
| 695 | CSCI | 370 | Software Engineering | GREENBERG, A | 32 | 0 | 4 | 2 | 7 | 4 | 3 | 6 | 3 | 0 | 0 | 1 | 1 | 2.880 |
| 696 | CSCI | 370 | Software Engineering | TSAI, C | 16 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 10 | 2.767 |
| 697 | CSCI | 370 | Software Engineering | GREENBERG, A | 32 | 0 | 3 | 4 | 6 | 5 | 2 | 2 | 3 | 0 | 0 | 4 | 2 | 2.676 |
| 698 | CSCI | 370 | Software Engineering | ABREU, A | 35 | 0 | 0 | 2 | 4 | 6 | 5 | 3 | 5 | 0 | 1 | 5 | 4 | 2.258 |
| 699 | CSCI | 370 | Software Engineering | ABREU, A | 35 | 0 | 0 | 0 | 3 | 2 | 4 | 5 | 7 | 1 | 5 | 3 | 5 | 1.963 |
| 700 | CSCI | 381 | VT: Special Topics in Comp Sci | RODAY, R | 36 | 6 | 11 | 10 | 5 | 3 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 3.700 |
| 701 | CSCI | 381 | VT: Special Topics in Comp Sci | LI, J | 32 | 0 | 5 | 5 | 7 | 4 | 4 | 2 | 2 | 0 | 0 | 1 | 2 | 3.100 |
| 702 | CSCI | 381 | VT: Special Topics in Comp Sci | GOLDBERG, R | 35 | 0 | 3 | 3 | 9 | 3 | 9 | 4 | 1 | 0 | 0 | 1 | 2 | 2.948 |
| 703 | CSCI | 381 | VT: Special Topics in Comp Sci | PHILLIPS, T | 26 | 3 | 3 | 2 | 2 | 2 | 3 | 2 | 2 | 0 | 0 | 2 | 5 | 2.890 |
| 704 | CSCI | 381 | VT: Special Topics in Comp Sci | ROZOVSKAYA, A | 31 | 1 | 1 | 1 | 2 | 2 | 1 | 2 | 2 | 0 | 0 | 1 | 18 | 2.738 |
| 705 | CSCI | 381 | VT: Special Topics in Comp Sci | TSAI, C | 16 | 0 | 1 | 4 | 0 | 1 | 0 | 1 | 3 | 0 | 0 | 1 | 5 | 2.736 |
| 706 | CSCI | 381 | VT: Special Topics in Comp Sci | CESARETTI, P | 20 | 0 | 0 | 2 | 4 | 1 | 1 | 4 | 4 | 0 | 0 | 0 | 4 | 2.719 |
| 707 | CSCI | 381 | VT: Special Topics in Comp Sci | WAXMAN, J | 40 | 5 | 1 | 4 | 4 | 1 | 1 | 0 | 5 | 0 | 6 | 6 | 7 | 2.233 |
| 708 | CSCI | 381 | VT: Special Topics in Comp Sci | ROZOVSKAYA, A | 35 | 0 | 2 | 0 | 1 | 2 | 3 | 3 | 2 | 0 | 0 | 6 | 16 | 1.911 |
| 709 | CSCI | 381 | VT: Special Topics in Comp Sci | BROWN, T | 21 | 0 | 0 | 0 | 1 | 3 | 0 | 0 | 6 | 0 | 0 | 6 | 5 | 1.519 |
| 710 | CSCI | 390 | Honors Readings in Comp Sci | GOSWAMI, M | 14 | 3 | 8 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 3.923 |
cs_df_results = calculate_average_gpas(cs_df)
cs_df_results
Average GPA for this entire subject in Fall 2022 is: 2.5, which is a C+ The hardest class based on average GPA in Fall 2022 is class number: 320 with an average GPA of 1.9, which is a C- Standard deviation tells us about the spread of the grades that students received in each class. A higher standard deviation indicates a wider range of grades, while a lower standard deviation indicates that grades were more closely clustered around the average.
| CLASS NUMBER | PROF | AVG GPA PROF | AVG GPA PROF LETTER | STD DEV GPA PROF | |
|---|---|---|---|---|---|
| 0 | 12 | HUANG, X | 2.9 | B- | 0.74 |
| 1 | 48 | FRIED, M | 3.0 | B | 1.09 |
| 2 | 48 | JAGDEO, M | 2.8 | B- | 1.28 |
| 3 | 48 | All Professors | 2.9 | B- | 1.19 |
| 4 | 85 | HILL, D | 2.3 | C+ | 1.45 |
| 5 | 90 | CONNOR, T | 4.0 | A | 0.00 |
| 6 | 111 | TSE, C | 2.3 | C+ | 1.30 |
| 7 | 111 | CHYN, X | 2.1 | C | 1.29 |
| 8 | 111 | All Professors | 2.2 | C | 1.30 |
| 9 | 211 | WAXMAN, J | 2.3 | C+ | 1.34 |
| 10 | 211 | ALAYEV, Y | 1.5 | D | 0.93 |
| 11 | 211 | All Professors | 2.0 | C | 1.34 |
| 12 | 212 | LORD, K | 2.4 | C+ | 1.30 |
| 13 | 212 | STEINBERG, O | 2.4 | C+ | 1.43 |
| 14 | 212 | All Professors | 2.4 | C+ | 1.32 |
| 15 | 220 | KAHROBAEI, D | 3.5 | B+ | 0.76 |
| 16 | 220 | TAO, X | 2.9 | B- | 0.75 |
| 17 | 220 | KONG, T | 2.2 | C | 1.45 |
| 18 | 220 | GRYAK, J | 2.2 | C | 1.13 |
| 19 | 220 | All Professors | 2.7 | B- | 1.19 |
| 20 | 240 | YEH, J | 2.8 | B- | 1.20 |
| 21 | 240 | TAO, X | 2.6 | C+ | 0.96 |
| 22 | 240 | FLUTURE, S | 1.9 | C- | 1.44 |
| 23 | 240 | All Professors | 2.6 | C+ | 1.22 |
| 24 | 313 | TAO, X | 2.4 | C+ | 1.32 |
| 25 | 313 | MITCHELL, T | 2.3 | C+ | 1.26 |
| 26 | 313 | STEINBERG, O | 2.2 | C | 1.47 |
| 27 | 313 | SVADLENKA, J | 2.1 | C | 1.46 |
| 28 | 313 | All Professors | 2.3 | C+ | 1.37 |
| 29 | 316 | SMITH-THOMPSON, A | 2.2 | C | 1.03 |
| 30 | 316 | KONG, T | 2.1 | C | 1.35 |
| 31 | 316 | SVITAK, J | 1.6 | D | 0.93 |
| 32 | 316 | All Professors | 2.0 | C | 1.12 |
| 33 | 320 | OBRENIC, B | 2.5 | C+ | 1.25 |
| 34 | 320 | BOKLAN, K | 0.8 | F | 1.22 |
| 35 | 320 | All Professors | 1.9 | C- | 1.34 |
| 36 | 323 | KAHROBAEI, D | 3.7 | A- | 0.58 |
| 37 | 323 | PHILLIPS, T | 2.5 | C+ | 1.55 |
| 38 | 323 | CHYN, X | 2.3 | C+ | 1.24 |
| 39 | 323 | BROWN, T | 1.6 | D | 1.38 |
| 40 | 323 | All Professors | 2.5 | C+ | 1.45 |
| 41 | 331 | SY, B | 2.8 | B- | 0.70 |
| 42 | 331 | OBRENIC, B | 2.5 | C+ | 0.94 |
| 43 | 331 | CHYN, X | 2.5 | C+ | 1.22 |
| 44 | 331 | LEAVITT, D | 2.4 | C+ | 0.96 |
| 45 | 331 | HELLER, P | 2.3 | C+ | 1.13 |
| 46 | 331 | All Professors | 2.5 | C+ | 1.03 |
| 47 | 335 | GOLDBERG, R | 2.9 | B- | 0.64 |
| 48 | 340 | SVADLENKA, J | 2.5 | C+ | 1.22 |
| 49 | 340 | FLUTURE, S | 2.6 | C+ | 0.88 |
| 50 | 340 | SMITH-THOMPSON, A | 2.7 | B- | 0.85 |
| 51 | 340 | RAHMAN, M | 1.9 | C- | 0.98 |
| 52 | 340 | All Professors | 2.5 | C+ | 1.07 |
| 53 | 343 | FLUTURE, S | 3.1 | B | 0.86 |
| 54 | 343 | UPADHYAY, V | 2.7 | B- | 1.15 |
| 55 | 343 | SVITAK, J | 1.9 | C- | 0.95 |
| 56 | 343 | All Professors | 2.6 | C+ | 1.13 |
| 57 | 348 | RAHMAN, M | 2.4 | C+ | 0.78 |
| 58 | 352 | BOKLAN, K | 2.1 | C | 1.13 |
| 59 | 355 | FRIED, M | 2.8 | B- | 1.01 |
| 60 | 355 | LAW, R | 2.1 | C | 1.55 |
| 61 | 355 | All Professors | 2.3 | C+ | 1.43 |
| 62 | 370 | GOLDBERG, R | 3.0 | B | 0.87 |
| 63 | 370 | GREENBERG, A | 2.8 | B- | 0.98 |
| 64 | 370 | TSAI, C | 2.8 | B- | 0.69 |
| 65 | 370 | ABREU, A | 2.1 | C | 1.06 |
| 66 | 370 | All Professors | 2.6 | C+ | 1.04 |
| 67 | 381 | RODAY, R | 3.7 | A- | 0.37 |
| 68 | 381 | LI, J | 3.1 | B | 0.82 |
| 69 | 381 | GOLDBERG, R | 2.9 | B- | 0.74 |
| 70 | 381 | PHILLIPS, T | 2.9 | B- | 1.16 |
| 71 | 381 | ROZOVSKAYA, A | 2.3 | C+ | 1.33 |
| 72 | 381 | TSAI, C | 2.7 | B- | 1.16 |
| 73 | 381 | CESARETTI, P | 2.7 | B- | 0.62 |
| 74 | 381 | WAXMAN, J | 2.2 | C | 1.48 |
| 75 | 381 | BROWN, T | 1.5 | D | 1.25 |
| 76 | 381 | All Professors | 2.6 | C+ | 1.19 |
| 77 | 390 | GOSWAMI, M | 3.9 | A- | 0.20 |
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure()
all_prof_df_results = cs_df_results[cs_df_results["PROF"] == 'All Professors']
sns.histplot(all_prof_df_results["STD DEV GPA PROF"], kde=True, color='skyblue')
plt.axvline(all_prof_df_results["STD DEV GPA PROF"].mean(), color='red', linestyle='dashed', linewidth=1, label='Mean')
min_ylim, max_ylim = plt.ylim()
plt.text(all_prof_df_results["STD DEV GPA PROF"].mean()*1.12, max_ylim*0.9, 'Mean: {:.2f}'.format(all_prof_df_results["STD DEV GPA PROF"].mean()))
# Generate a color palette with as many colors as classes
colors = sns.color_palette("husl", len(all_prof_df_results))
for idx, (_, row) in enumerate(all_prof_df_results.iterrows()):
plt.axvline(row["STD DEV GPA PROF"], color=colors[idx], linestyle='dotted', linewidth=0.5, label=row["CLASS NUMBER"])
plt.title("Distribution of Standard Deviations of GPAs")
plt.xlabel("Standard Deviation")
plt.ylabel("Frequency")
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1)) # Adjusted the location to ensure it doesn't overlap with the plot
plt.show()
teacher_cs_df_results = calculate_teacher_gpas(cs_df)
teacher_cs_df_results
Professors who teach more than one class, have a GPA that is the same or higher than the subject average GPA (2.5), and have a withdrawal percentage that is less or equal than the subject average withdrawal percentage (24.32%):
PROF AVG GPA PROF AVG GPA PROF LETTER STD DEV GPA PROF \
8 FRIED, M 2.9 B- 1.1
9 GOLDBERG, R 2.9 B- 0.8
11 GREENBERG, A 2.8 B- 1.0
17 KAHROBAEI, D 3.6 B+ 0.7
24 OBRENIC, B 2.5 C+ 1.2
34 TAO, X 2.6 C+ 1.0
37 UPADHYAY, V 2.7 B- 1.2
39 YEH, J 2.8 B- 1.2
NUM OF CLASSES WITHDRAW PERCENTAGE
8 2 7.5
9 3 11.0
11 3 3.1
17 3 18.1
24 3 22.3
34 4 9.5
37 2 23.2
39 3 12.5
Note: This ignores rate my professor ratings. This is soley based on GPA and it doesn't consider how much students actually learn from these teachers!
Average standard deviation of GPA for all teachers in this subject in Fall 2022 is: 1.3
| PROF | AVG GPA PROF | AVG GPA PROF LETTER | STD DEV GPA PROF | NUM OF CLASSES | WITHDRAW PERCENTAGE | |
|---|---|---|---|---|---|---|
| 0 | ABREU, A | 2.1 | C | 1.1 | 2 | 12.9 |
| 1 | ALAYEV, Y | 1.5 | D | 0.9 | 1 | 33.3 |
| 2 | BOKLAN, K | 1.5 | D | 1.3 | 2 | 67.2 |
| 3 | BROWN, T | 1.6 | D | 1.3 | 2 | 21.6 |
| 4 | CESARETTI, P | 2.7 | B- | 0.6 | 1 | 20.0 |
| 5 | CHYN, X | 2.3 | C+ | 1.3 | 4 | 33.5 |
| 6 | CONNOR, T | 4.0 | A | 0.0 | 1 | 0.0 |
| 7 | FLUTURE, S | 2.6 | C+ | 1.2 | 5 | 45.9 |
| 8 | FRIED, M | 2.9 | B- | 1.1 | 2 | 7.5 |
| 9 | GOLDBERG, R | 2.9 | B- | 0.8 | 3 | 11.0 |
| 10 | GOSWAMI, M | 3.9 | A- | 0.2 | 1 | 7.1 |
| 11 | GREENBERG, A | 2.8 | B- | 1.0 | 3 | 3.1 |
| 12 | GRYAK, J | 2.2 | C | 1.1 | 2 | 19.4 |
| 13 | HELLER, P | 2.3 | C+ | 1.1 | 1 | 44.7 |
| 14 | HILL, D | 2.3 | C+ | 1.4 | 1 | 11.8 |
| 15 | HUANG, X | 2.9 | B- | 0.7 | 1 | 26.3 |
| 16 | JAGDEO, M | 2.8 | B- | 1.3 | 1 | 7.7 |
| 17 | KAHROBAEI, D | 3.6 | B+ | 0.7 | 3 | 18.1 |
| 18 | KONG, T | 2.2 | C | 1.4 | 3 | 22.9 |
| 19 | LAW, R | 2.1 | C | 1.6 | 3 | 28.6 |
| 20 | LEAVITT, D | 2.4 | C+ | 1.0 | 1 | 11.1 |
| 21 | LI, J | 3.1 | B | 0.8 | 1 | 6.2 |
| 22 | LORD, K | 2.4 | C+ | 1.3 | 2 | 26.3 |
| 23 | MITCHELL, T | 2.3 | C+ | 1.3 | 3 | 26.4 |
| 24 | OBRENIC, B | 2.5 | C+ | 1.2 | 3 | 22.3 |
| 25 | PHILLIPS, T | 2.6 | C+ | 1.4 | 3 | 27.8 |
| 26 | RAHMAN, M | 2.2 | C | 0.9 | 2 | 21.7 |
| 27 | RODAY, R | 3.7 | A- | 0.4 | 1 | 0.0 |
| 28 | ROZOVSKAYA, A | 2.3 | C+ | 1.3 | 2 | 51.5 |
| 29 | SMITH-THOMPSON, A | 2.3 | C+ | 1.0 | 4 | 10.4 |
| 30 | STEINBERG, O | 2.3 | C+ | 1.5 | 3 | 22.1 |
| 31 | SVADLENKA, J | 2.4 | C+ | 1.3 | 4 | 39.4 |
| 32 | SVITAK, J | 1.7 | C- | 1.0 | 4 | 26.1 |
| 33 | SY, B | 2.8 | B- | 0.7 | 1 | 50.0 |
| 34 | TAO, X | 2.6 | C+ | 1.0 | 4 | 9.5 |
| 35 | TSAI, C | 2.8 | B- | 1.0 | 2 | 46.9 |
| 36 | TSE, C | 2.3 | C+ | 1.3 | 1 | 41.9 |
| 37 | UPADHYAY, V | 2.7 | B- | 1.2 | 2 | 23.2 |
| 38 | WAXMAN, J | 2.2 | C | 1.4 | 3 | 16.5 |
| 39 | YEH, J | 2.8 | B- | 1.2 | 3 | 12.5 |
import plotly.express as px
# Set the overall average GPA
mean_gpa = 2.5
# Create the scatter plot using Plotly Express
fig = px.scatter(teacher_cs_df_results,
x=list(range(len(teacher_cs_df_results))),
y='AVG GPA PROF',
hover_name='PROF', # This will show the professor's name when hovering over a point
title="CS Professor GPA Averages vs CS Subject Average GPA",
labels={'x': 'Professor (By Index Above)', 'y': 'Average GPA'},
size_max=100)
# Add a line for the average GPA
fig.add_shape(
type='line',
line=dict(dash='dash', color='red'),
x0=0,
x1=len(teacher_cs_df_results),
y0=mean_gpa,
y1=mean_gpa,
)
# Show the plot
fig.show()
# Count the number of classes with an average GPA at or greater than 3.0 and those less than 3.0
green_percentage = teacher_cs_df_results[teacher_cs_df_results['AVG GPA PROF'] >= 3.0].shape[0]
red_percentage = teacher_cs_df_results[teacher_cs_df_results['AVG GPA PROF'] < 3.0].shape[0]
# Create the values and labels for the pie chart
values = [green_percentage, red_percentage]
labels = ['At or above 3.0 (B or above)', 'At or below 2.7 (B- or below)']
# Define the colors for each section (green and red)
colors = ['#77dd77', '#ff6961']
# Plot the pie chart
plt.figure(figsize = (6, 6))
plt.pie(values, labels = labels, colors = colors, autopct = '%1.1f%%')
# Set the title
plt.title("Average GPA of all CS Teachers")
# Show the plot
plt.show()
CSCI 12 (Intro Computers and Computation) - Concepts of thinking computationally and the technical tools to function effectively in the digitally-connected world. Hands-on introduction to computers, computation, the Internet, and the basics of computer hardware and software. Students will have experience during the instructed computer lab with a number of software environments including an operating system, a word processor, a presentation tool, a spreadsheet, and a database system. The course will focus on problem solving and programming within the context of a wide range of applications, and prepare students for further study in a variety of majors and minors. In addition, students will acquire the skills needed to learn other similar tools on their own. Two and one-half years of high school mathematics is required
CSCI 48 (Spreadsheet Programming) - In-depth introduction to spreadsheets as a tool for organizing, processing, and analyzing numerical information in such areas as business, finance, engineering, natural and social sciences. Topics include basic cell operations, text manipulation, formulas, functions, arrays, circular references, charting techniques, pivot tables, conditional formatting, and VBA programming
General Average GPA for CSCI 48</i>:
CSCI 85 (Database Application Programming) - A continuation of CSCI 80. Students will learn to program databases using SQL. Microsoft Access integrated with Visual Basic. In addition, object-oriented database programming such as Oracle and Jasmine will be covered
Professor:
CSCI 90 (Topics in Computing) - Topics in computer programming and applications at a level appropriate for students who are not majoring in computer science. Topics and prerequisites will be announced at registration time. The course may be repeated for credit providing the topic is different, and may not be applied toward the major in computer science
Professor:
CSCI 111 (Intro to Algorithmic Problem Solving in C++) - Introduction to the principles of algorithmic analysis and computational implementation. Topics include implementation methodologies, including choice and use of data types, objects, classes, and methods; control structures; basic data structures including arrays; procedures and functions; parameters and arguments; scope and lifetime of variables; input and output; Written documentation describing algorithms and identification and correction of algorithmic implementations
Professors:
General Average GPA for CSCI 111:
CSCI 211 (OOP in C++) - Objective-oriented algorithmic problem solving in C++, with attention to general as well as language-specific issues including pointer and pointer arithmetic; linked lists; memory management; recursion; operator overloading; inheritance and polymorphism; stream and file I/O; exception handling; templates and STL; applications of simple data structures; testing and debugging techniques
Professors:
General Average GPA for CSCI 211:
CSCI 212 (OOP in Java) - Object-oriented algorithmic problem solving in Java, with attention to general as well as language-specific issues including applications, event-driven programming; elements of graphical user interfaces (GUIs); linked lists, recursion, inheritance and polymorphism; file I/O; exception handling; packages; applications of simple data structures; applets; concept of multi-threading; testing and debugging
Professors:
General Average GPA for CSCI 212:
CSCI 220 (Discrete Structures) - Algorithms, recursion, recurrences, asymptotics, relations, graphs and trees, applications
Professors:
General Average GPA for CSCI 220:
CSCI 240 (Computer Organization and Assembly Language) - Principles of computer design and implementation. Instruction set architecture and register-transfer level execution; storage formats; binary data encoding; bus structures; assembly language programming
Professors:
General Average GPA for CSCI 240:
CSCI 313 (Data Structures) - Fundamentals data structures and their implementations: stacks, queues, trees (binary and AVL), heaps, graphs, hash tables. Searching and sorting algorithms. Runtime analysis. Examples of problem-solving using greedy-algorithm, divide-and-conquer, and backtracking
Professors:
General Average GPA for CSCI 313:
CSCI 316 (Principles of Programming Languages) - Principles and implementation of programming languages. Topics include: the procedural, object-oriented, functional, and logic programming paradigms, syntax (BNF, expression grammars, operator precedence and associativity), variables (scope, storage bindings, and lifetime), data types, control structures, function call and return (activation records and parameter passing), formal semantics. Programming assignments
Professors:
General Average GPA for CSCI 316:
CSCI 320 (Theory of Computation) - Finite state machines, regular languages, regular expressions, grammars, context-free languages, pushdown automata, Turing machines, recursive sets, recursively enumerable sets, reductions, Halting problem, diagonalization
Professors:
General Average GPA for CSCI 320:
CSCI 323 (Design and Analysis Algorithms) - Advanced data structures B-trees, graphs, hash-tables. Problem-solving strategies including divide-and-conquer, backtracking, dynamic programming, and greedy algorithms. Advanced graph algorithms. Time complexity analysis. NP-complete problems. Applications to sorting, searching, strings, graphs. Programming projects)
Professors:
General Average GPA for CSCI 323:
CSCI 331 (Database Systems) - ER modeling; functional dependencies and relational design; file organization and indexing; relational algebra and calculi as query languages; SQL; transactions, concurrency and recovery; query processing. Programming projects
Professors:
General Average GPA for CSCI 331:
CSCI 335 (Information Organization and Retrieval) - Concepts of information retrieval: keywords and Boolean retrieval; text processing, automatic indexing, term weighting, similarity measures; retrieval models: vector model, probabilistic model; extended Boolean systems: fuzzy set, p-norm models; linguistic model; extensions and AI techniques: learning and relevance feedback; term dependence; document and term clustering;network approaches; linguistic analysis and knowledge representation. Implementation: inverted files; efficiency issues for large-scale systems; integrating database and information retrieval
Professor:
CSCI 340 (Operating Systems Principles) - Principles of the design and implementation of operating systems. Concurrency, multithreading, synchronization, CPU scheduling, interrupt handling, deadlocks, memory management, secondary storage management, file systems. Programming projects to illustrate portions of an operating system
Professors:
General Average GPA for CSCI 340:
CSCI 343 (Computer Architecture) - Instruction set architectures, including RISC, CISC, stack, and VLIW architectures. The memory hierarchy, including cache design and performance issues, shared memory organizations, and bus structures. Models of parallel computing, including multiprocessors, multicomputers, multivector, SIMD, PRAM, and MIMD architectures. Pipelining models, including clocking and timing, instruction pipeline design, arithmetic pipeline design, and superscalar pipelining
Professors:
General Average GPA for CSCI 343:
CSCI 348 (Data Communications) - Computer communications and networks; carriers, media, interfaces (RS 232, RS 422, CCITT); circuit types, data codes, synchronous and asynchronous transmission; protocols (OSI, TCP/IP); modems, multiplexors, and other network hardware; error correction and encryption; voice and data switching: local area networks, ISDN, packet switching; issues in the architecture, design, and management of networks
Professor:
CSCI 352 (Cryptography) - An introduction to cryptographic practices, concepts and protocols. Topics include the mathematical foundations for cryptography, public key methods (e.g., RSA and El Gamal), block ciphers (e.g., DES and Rijndael), key agreement architectures (Diffie-Hellman), linear feedback shift registers and stream ciphers (e.g., A5 for GSM encryption), signatures and hash functions, (pseudo) random number generators and how to break the ENIGMA machine
Professor:
CSCI 355 (Internet and Web Technologies) - Internet protocol stack, analysis of representation protocols; Internet applications: client-server architecture, popular Internet application protocols, Internet application design, client side programming, server side programming, Web application and website design; programming projects
Professors:
General Average GPA for CSCI 355:
CSCI 370 (Software Engineering) - Principles of software engineering including the software life cycle, reliability, maintenance, requirements and specifications, design, implementation and testing. Oral and written presentations of the software design. Implementation of a large programming project using currently-available software engineering tools
Professors:
General Average GPA for CSCI 370:
CSCI 381 (Special Topics in Computer Science)
Professors:
General Average GPA for CSCI 381:
CSCI 390 (Honors Readings in Computer Science) - Students will study and report on survey and research papers dealing with various current topics in computer science selected by the instructor. Topics for each offering of the course will be announced at registration time
Professor: